package com.pe.pgn.clubpgn.webapp.controller.penalizacionbonificacion;

import java.util.Calendar;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;

import com.pe.pgn.clubpgn.common.CLPConstantes;
import com.pe.pgn.clubpgn.domain.ClpbTipoIncidenciaPuntos;
import com.pe.pgn.clubpgn.domain.beans.BNIncidenciaPuntos;
import com.pe.pgn.clubpgn.service.IncidenciaPuntosService;
import com.pe.pgn.clubpgn.service.TipoIncidenciaPuntosService;
import com.pe.pgn.clubpgn.webapp.controller.BaseFormController;
import com.pe.pgn.clubpgn.webapp.util.CalendarUtil;

@Controller
@RequestMapping("/penalizacionbonificacion/**")
public class PenalizacionBonificacionController extends BaseFormController{
	@Autowired
	private IncidenciaPuntosService incidenciaService;
	
	@Autowired
	private TipoIncidenciaPuntosService tipoIncidenciaService;
	
	private static final String ES_EDITABLE = "esEditable";
	
	@RequestMapping(value = "/penalizacionbonificacionlist.html")
    public void listarPenalizacionBonificacion(Model model) {

		List<ClpbTipoIncidenciaPuntos> tipoIncidencias  = tipoIncidenciaService.obtenerTipoIncidenciaPuntos();
		List<BNIncidenciaPuntos> incidencias = incidenciaService.listaIncidencias();
		System.out.println("LOS TIPOS DE INCIDENCIAS : "+ tipoIncidencias.size());
		
		model.addAttribute("incidencias", incidencias);
		model.addAttribute("tipoIncidencias", tipoIncidencias);	
		model.addAttribute("fecha_documento_date_format", CLPConstantes.DATE_PATTERN);
    }
	
	@RequestMapping(value = "/penalizacionbonificacionform.html", method = RequestMethod.GET)
	public @ModelAttribute("penalizacionbonificacionform") BNIncidenciaPuntos verIncidencia(
		   @RequestParam(value = "id", required = false) Long id, Model model) {

		BNIncidenciaPuntos bnincidencia = new BNIncidenciaPuntos();
		List<ClpbTipoIncidenciaPuntos> tipoIncidencias = tipoIncidenciaService.obtenerTipoIncidenciaPuntos();
		
		if (id != null) { //modo update
			bnincidencia = incidenciaService.obtenerIncidencia(id);
			model.addAttribute(ES_EDITABLE, Boolean.FALSE);			
		} else {
			bnincidencia.setDaFechaIncidencia(CalendarUtil.calendarToString(CLPConstantes.DATE_PATTERN, Calendar.getInstance()));
			bnincidencia.setDaFechaCreacion(CalendarUtil.calendarToString(CLPConstantes.DATE_PATTERN, Calendar.getInstance()));
			model.addAttribute(ES_EDITABLE, Boolean.TRUE);			
		}
			model.addAttribute("date_format", CLPConstantes.DATE_PATTERN);
			model.addAttribute("tipoIncidencias"   	   , tipoIncidencias);
			model.addAttribute("penalizacionbonificacionform" , bnincidencia);
		return bnincidencia;
	}
	
	@SuppressWarnings("rawtypes")
	@RequestMapping(value = "/penalizacionbonificacionform.html", method = RequestMethod.POST)
	public String manager(@ModelAttribute("penalizacionbonificacionform") BNIncidenciaPuntos bnincidencia,
		BindingResult result, SessionStatus status, HttpServletRequest request, Model model) {
		
		String resultado="";
		resultado = incidenciaService.verificarPeriodoAcumulacion(bnincidencia.getDaFechaIncidencia());
		if(resultado.equals(CLPConstantes.ERROR)){
			saveError(request, getText("penalizacionbonificacionform.periodo.no.encontrado", request.getLocale()));
			return "/penalizacionbonificacion/penalizacionbonificacionform";	 
		}else{
			Map	map  = incidenciaService.guardarIncidencia(bnincidencia);
	    	if(map.get("msg").equals("success")){
	    		saveMessage(request, getText("penalizacionbonificacionform.added", request.getLocale()));
	    		Long id = (Long)map.get("id");
				return "redirect:penalizacionbonificacionform.html?id=" + id + "&amp;from=list";
	    	} else {
	    		
	    		List<ClpbTipoIncidenciaPuntos> tipoIncidencias = 
	    		tipoIncidenciaService.obtenerTipoIncidenciaPuntos();
	    		
	    		String strDetalle = String.valueOf(map.get("detalle"));
				model.addAttribute("date_format", CLPConstantes.DATE_PATTERN);
				model.addAttribute("tipoIncidencias", tipoIncidencias);
				saveError(request, getText(strDetalle, request.getLocale()));	    		
				return "/penalizacionbonificacion/penalizacionbonificacionform";	    		
	    	}
		}
		
	
	}	
}
